import java.util.ArrayList;
import java.util.List;

public class test1 {
    //力扣 438.找到字符串中所有的字母异位词
    public static void main(String[] args) {
        findAnagrams("abcccc", "abc");
    }

    public static List<Integer> findAnagrams(String ss, String pp) {
        List<Integer>  ret = new ArrayList<>();
        char[] s = ss.toCharArray();
        char[] p = pp.toCharArray();
        int[] hash1 = new int[26];  //统计pp字符串中字符出现的个数
        for (char c : p) {
            hash1[c - 'a']++;
        }
        int[] hash2 = new int[26];  //统计窗口中字符出现的个数
        int count = 0;//判断有效字符的个数

        for (int left = 0, right = 0; right < s.length; right++) {
            char in = s[right];
            hash2[in - 'a']++;//进窗口
            if (hash2[in - 'a'] <= hash1[in - 'a']) { //说明是有效字符，维护count++
                count++;
            }
            if (right-left+1>p.length) {  //判断：说明窗口的长度已经超过了p字符串的长度，需要进行出窗口
                char out = s[left];
                left++;
                // hash2[out - 'a']--;  //出窗口
                if (hash2[out - 'a']-- <= hash1[out - 'a']) {  //如果要出窗口的字符出窗口后的数量小于p字符串，说明它是有效字符
                    count--;
                }
            }
            if(count==p.length){
                ret.add(left);
            }
        }
        return ret;
    }
}
